package com.example.backend.controller;

import com.example.backend.service.AiCodeHelperService;
import jakarta.annotation.Resource;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
@RequestMapping("/ai")
public class AiController {

    @Resource
    private AiCodeHelperService aiCodeHelperService;

    @GetMapping("/chat")
    /**
     * 处理聊天请求并返回服务器发送事件(SSE)流
     * @param memoryId 记忆ID，用于标识特定的对话上下文
     * @param message 用户输入的消息内容
     * @return 返回一个Flux流，包含服务器发送事件(SSE)格式的字符串数据
     */
    public Flux<ServerSentEvent<String>> chat(int memoryId, String message) {
        // 调用AI代码助手服务的聊天流方法，将输入的消息转换为流式响应
        // 然后将每个响应块(chunk)转换为ServerSentEvent格式
        return aiCodeHelperService.chatStream(memoryId, message)
                .map(chunk -> ServerSentEvent.<String>builder()
                        .data(chunk)  // 设置事件数据为响应块内容
                        .build());     // 构建完整的服务器发送事件
    }
}

